const express = require('express');
const router = express.Router();
const md5 = require('../utils/md5')
// 引入用户数据模型
const userModel = require('../db/model/userModel')
// 导入tokenUtils
const { createToken, verifyToken } = require('../utils/tokenUtils')
// 导入CODE
const { CODE } = require('../utils/constants')
//    /admin/login
router.post('/login', async (req, res) => {
    // 获取用户提交的用户名和密码
    let { username, pwd } = req.body;
    // 1. 查询数据库，是否有该用户
    //    1-1. 对pwd进行md5加密
    pwd = md5(pwd);
    // 2. 查询用户
    try {
        let user = await userModel.findOne({ username, pwd }).select({ pwd: 0 })
        console.log('user123123: ', user);
        // 3. 判断
        if (user) {// 用户名密码正确
            // 3-1. 创建token   数据库查出来的对象，不是普通对象，不能直接使用createToken，需要先转化成普通对象操作
            // console.log('createToken user: ',{username:user.username, _id:user._id,profile:user.profile});
            user = {username:user.username, _id:user._id,profile:user.profile}
            let token = createToken(user)
            // 响应给前端的信息
            res.json({
                code: CODE.SUCCESS,
                data: {
                    token,
                    user
                },
                message: "登陆请求成功"
            })
        } else {// 用户名密码错误
            res.json({
                code: CODE.DATA_ERROR,
                data: null,
                message: '用户名密码错误'
            })
        }
    } catch (e) {
        res.json({
            code: CODE.SERVER_ERROR,
            data: null,
            message: '网络连接异常'
        })
    }

})

// 根据请求头中的token 获取用户数据
// /admin/info 
router.get('/info', async (req,res)=>{
    // 1. 获取请求头中的 token
    let {token} = req.headers;
    console.log('token:123123 ', token);
    // 2. 校验token获取token中的 用户id
    try{ // token合法
        let {_id} = await verifyToken(token); // 获取token中的_id
        // 根据id获取用户数据
        let user = await userModel.findOne({_id}).select({pwd:0});
        res.json({
            code:CODE.SUCCESS,
            data:user
        })
    }catch(e){
        // token异常
        res.json({
            code:CODE.DATA_ERROR,
            data:null,
            message:'token异常'
        })
    }
})

// 退出登录
router.get('/logout', (req, res)=>{
    res.json({
        code:CODE.SUCCESS,
        message:'退出成功'
    })
})

module.exports = router;